import { error } from '@sveltejs/kit'; import { getById } from '$lib/server/services/projects'; import { loadCurrent, loadCompletions } from '$lib/server/services/routines'; import { archiveRoutineAction, completeRoutineAction, editRoutineAction, } from '$lib/server/services/routine-actions'; import { numericId } from '$lib/server/services/validation'; import { computeRoutineState } from '$lib/shared/routine-metrics'; import type { Actions, PageServerLoad } from './$types'; export const load: PageServerLoad = async ({ params }) => { const projectId = numericId(params.projectId); const routineId = numericId(params.routineId); const project = await getById(projectId); if (!project || project.archived) { throw error(404, 'Projet introuvable'); } const routine = await loadCurrent(routineId); if (!routine || routine.projectId !== projectId) { throw error(404, 'Routine introuvable'); } const completions = await loadCompletions(routineId); // Archived routines are frozen at their archive instant, not now. const at = routine.archivedAt ? Temporal.Instant.from(routine.archivedAt) : Temporal.Now.instant(); return { project: { id: project.id, name: project.name }, routine, completions, state: computeRoutineState(routine, completions, at), }; }; export const actions: Actions = { edit: async ({ request, params }) => { const data = await request.formData(); return editRoutineAction(data, numericId(params.routineId), { type: 'edit', }); }, complete: async ({ request, params }) => { const data = await request.formData(); return completeRoutineAction(data, numericId(params.routineId)); }, archive: async ({ params }) => { return archiveRoutineAction(numericId(params.routineId)); }, };